#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
package ${package}.basic.module.menu.service;

import ${package}.common.bean.po.Menu;
import ${package}.common.bean.po.Role;
import ${package}.common.bean.po.User;
import ${package}.common.bean.vo.QueryBean;
import ${package}.common.bean.vo.SubPermission;
import ${package}.common.bean.vo.ViewTree;
import com.github.pagehelper.PageInfo;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Description: 无法补充
 *
 * @author wupanhua
 * @date 2019/8/6 15:28
 *
 * <pre>
 *              ${copyright}
 *      Copyright (c) 2019. All Rights Reserved.
 * </pre>
 */
public interface MenuService {

    /**
     * 分页获得菜单列表
     * @param queryBean
     * @return
     */
    /**
     * Description:
     * <分页获得菜单列表>
     * @author wupanhua
     * @date 17:55 2019/8/6
     * @param queryBean 1
     * @return com.github.pagehelper.PageInfo<Menu>
     **/
    PageInfo<Menu> queryMeunListByLimit(QueryBean queryBean);

    /**
     * Description:
     * <新增菜单列表>
     * @author wupanhua
     * @date 17:55 2019/8/6
     * @param menu 1
     **/
    void addMenu(Menu menu);

    /**
     * Description:
     * <获取当前用户下的菜单列表>
     * @author wupanhua
     * @date 17:56 2019/8/6
     * @param user 1
     * @return java.util.List<Menu>
     **/
    List<Menu> queryMenuByCurrentUser(User user);

    /**
     * Description:
     * <获取所有菜单列表>
     * @author wupanhua
     * @date 17:56 2019/8/6
     * @return java.util.List<Menu>
     **/
    List<Menu> queryAllMenu();

    /**
     * Description:
     * <树形菜单>
     * @author wupanhua
     * @date 17:57 2019/8/6
     * @return java.util.List<ViewTree>
     **/
    List<ViewTree> treeMenu();

    /**
     * Description:
     * <根据菜单主键获取下面的权限>
     * @author wupanhua
     * @date 17:57 2019/8/6
     * @param menuKey 1
     * @param roleKey 2
     * @return java.util.List<SubPermission>
     **/
    List<SubPermission> querySubPermission(Long menuKey, Long roleKey);

    /**
     * Description:
     * <获取权限列表下的所有菜单>
     * @author wupanhua
     * @date 17:57 2019/8/6
     * @param roles 1
     * @return java.util.Map<java.lang.String,java.lang.Object>
     **/
    HashMap<String, Object> queryCurrentPermissionMenu(List<Role> roles);

    /**
     * Description:
     * <根据id删除菜单>
     * @author pig
     * @date 17:58 2019/8/6
     * @param id 1
     **/
    void deleteMenuById(Long id);

    /**
     * Description:
     * <禁用/启用菜单>
     * @author pig
     * @date 17:58 2019/8/6
     * @param menu 1
     **/
    void disableOrEnableMenu(Menu menu);

    /**
     * Description:
     * <根据id查询菜单信息>
     * @author pig
     * @date 17:58 2019/8/6
     * @param id 1
     * @return Menu
     **/
    Menu queryMenuById(Long id);

    /**
     * Description:
     * <根据id更新菜单信息>
     * @author pig
     * @date 17:59 2019/8/6
     * @param menu 1
     **/
    void updateMenuById(Menu menu);

    /**
     * Description:
     * <查询所有的子菜单>
     * @author pig
     * @date 17:59 2019/8/6
     * @return java.util.List<Menu>
     **/
    List<Menu> queryAllChildren();


    /**
     * Description:
     * <批量删除菜单>
     * @author pig
     * @date 17:59 2019/8/6
     * @param keys 1
     * @return java.util.List<Menu>
     **/
    List<Menu> removeMenusBykeys(List<Long> keys);

    /**
     * Description:
     * <查询name是否重复>
     * @author pig
     * @date 18:00 2019/8/6
     * @param name 1
     * @param id 2
     * @return java.lang.Boolean
     **/
    Boolean menuVerifyName(String name, Long id);
}
